﻿#pragma once
//【说明】
//定义一种数组型（大小堆）二叉树

//【头文件包含】
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
#include<math.h>


//【自定义配置】
typedef  int  HpDataType;


//【结构体声明】
/*堆结构*/typedef struct Heap
{
	HpDataType* a;
	int size;//表示下一个节点指针
	int capacity;
}Hp;




//【函数声明】
/*初始化*/void HeapInit(Hp* php, HpDataType* a, int n);

/*空间销毁*/void HeapDestroy(Hp* php);
/*数据插入*/void HeapPush(Hp* php, HpDataType x);
/*数据删除*/void HeapPop(Hp* php);
/*堆顶数据提取*/HpDataType HeapTop(Hp* php);

/*高度计算*/int HeapHigh(Hp* php);
/*算法：向下调整(小堆)*/void AdjustDown(HpDataType* a, int n, int root);
/*算法：数据交换*/void Swap(HpDataType* p1, HpDataType* p2);
/*算法：向上调整(小堆)*/void AdjustUp(HpDataType* a, int child);
/*利用堆快速排序*/void HeapSort(int* a, int n);
/*打印*/void HeapPrint(Hp* php);
/*格式打印*/void HeapPrint2(Hp* php);
/*利用小堆求前K个最大值*/int* HeapTopK_L(int* arr, int arrSize, int k, int* returnSize);

/**/
/**/